Conventional electronic systems generate computer-rendered graphics for display on display devices such as a liquid crystal display (LCD). In a typical system, a central processing unit (CPU) is coupled to a graphics processing unit (GPU) that has a dedicated video memory for storing computer-rendered pixel data for display on a screen. The GPU renders pixel data from two-dimensional or three-dimensional graphics primitives and copies the pixel data to a frame buffer in the video memory. Then, a display controller within the GNU reads the pixel data from the frame buffer and generates video signals for output to the display device.
The video signals are time-sensitive. The display device may be configured to operate at a specific refresh frequency such as 60 Hz. In other words, each pixel in the display device is updated a number of times per second (e.g., 60 times per second). The timing requirements for the video signals are precise, but the video memory typically operates asynchronously from the display controller. In other words, the display controller transmits a request to the video memory to read the pixel data for a particular line of pixels some time before that pixel data is utilized to generate the time-sensitive video signals. However, multiple clients may attempt to access the video memory at the same time. For example, the CPU may be writing data to the video memory that is used to generate pixel data for the next frame of video, the graphics pipeline may access the data to generate the pixel data, or the graphics pipeline may write pixel data to the frame buffer in the video memory. Because the bandwidth of the video memory is limited, a memory fetch request submitted to the video memory may be delayed for a number of clock cycles before the pixel data associated with the fetch request is returned to the display controller. If the delay is long enough, then the pixel data received by the display controller corresponds to a particular point in the video signals that was already sent to the display. Thus, the pixel data must be discarded and the video signals sent to the display contained invalid data for those particular pixels. This condition is referred to herein as a memory underflow condition where the memory request is not returned in time to meet the timing requirements of the video signals. Thus, there is a need for addressing this issue and/or other issues associated with the prior art.